//校验身份证格式是否正确
function isValidID(id) {
  // 身份证号码的正则表达式
  var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;

  // 判断格式是否正确
  if (reg.test(id) === false) {
    return false;
  }

  // 判断是否为18位身份证号码
  if (id.length !== 18) {
    return false;
  }

  // 其他验证逻辑...

  return true;
}

// 测试
var id = "44030219900307713";
console.log(isValidID(id)); // 输出 true 或 false

//校验手机号
function isValidPhoneNumber(phoneNumber) {
  // 手机号正则表达式
  var reg = /^1[3456789]\d{9}$/;

  return reg.test(phoneNumber);
}

// 测试
var phoneNumber = "13812345678";
console.log(isValidPhoneNumber(phoneNumber)); // 输出 true 或 false

//校验邮箱
function isValidEmail(email) {
  // 邮箱正则表达式
  var reg = /\S+@\S+\.\S+/;

  return reg.test(email);
}

// 测试
var email = "test@example.com";
console.log(isValidEmail(email)); // 输出 true 或 false

//效验密码
function isValidPassword(password) {
  // 密码强度正则表达式
  var reg = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$/;

  return reg.test(password);
}

// 测试
var password = "Secure1!";
console.log(isValidPassword(password)); //

//冒泡排序
function bubbleSort(arr) {
  var len = arr.length;
  for (var i = 0; i < len; i++) {
    // 注意下面 j < len - 1 - i
    for (var j = 0; j < len - 1 - i; j++) {
      // 相邻元素两两对比
      if (arr[j] > arr[j + 1]) {
        // 元素交换
        var temp = arr[j + 1]; // 临时变量
        arr[j + 1] = arr[j];
        arr[j] = temp;
      }
    }
  }
  return arr;
}

//防抖函数
function debounce(fn, delay) {
  var timer = null; // 声明计时器
  return function () {
    var context = this;
    var args = arguments;
    clearTimeout(timer);
    timer = setTimeout(function () {
      fn.apply(context, args);
    }, delay);
  };
}
//节流函数
/**
 * 函数节流，限制函数的执行频率
 * @param {Function} fn - 需要节流的函数
 * @param {number} delay - 延迟时间，单位为毫秒
 * @returns {Function} - 节流后的函数
 */
function throttle(fn, delay) {
  var timer = null;
  return function () {
    var context = this;
    var args = arguments;
    if (!timer) {
      timer = setTimeout(function () {
        fn.apply(context, args);
        timer = null;
      }, delay);
    }
  };
}
